import jwt
# 设置有效期
import datetime

from django.conf import settings
from rest_framework.exceptions import AuthenticationFailed

# 是一种安全验证机制

# 头部
header={
    'alg':'HS256',#加密算法
    'typ':'JWT'#令牌的类型
}
# 密钥，这个应用密钥，不要泄露
SECRET_KEY="123"
    # settings.SECRET_KEY
class ToolJWT:
    # 生成token

    # 参数suer为一个字典{id,username }
    def gettoken(self,user):

        payload={
            # 一定要有过期时间
            'userid':user.get("id"),
            "username":user.get("username"),#存储右多少哥数据
            # 过期时间
            "exp":datetime.datetime.now()+datetime.timedelta(hours=1)#过期时间


        }
        # 生成token
        return jwt.encode(payload, SECRET_KEY, algorithm='HS256', headers=header)

    # 验证token
    # 验证token是否有效
    def checktoken(self,token):
        try:
            # 如果有效进行解码，拿到用户的信息
            payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'], headers=header)

        except jwt.ExpiredSignatureError:
            raise AuthenticationFailed('token已过期')

        except jwt.InvalidTokenError:
            raise AuthenticationFailed('无效token')


        return payload







# token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiYWRtaW4iLCJleHAiOjE3MzAzNzU4MDN9.FMfgpiFTDrkDB9O1mpslKAsk3Cs6e_qVlcrJzLqflYA"
tooljwt=ToolJWT()
# tooljwt.gettoken({"id":1,"username":"admin"})
# ToolJWT.gettoken({"id":1,"username":"admin"})
# 打印生成token
# print(tooljwt.gettoken({"id":1,"username":"admin"}))

# print(tooljwt.checktoken(token))
















